class Solution {
    public boolean isAlienSorted(String[] words, String order) {
        /**
        首先将给定的 order\textit{order}order 转化为字典序索引 index，index[i] 表示字符 i在字母表 order排序索引，index[i]>index[j]即表示字符 i 在字母表中的字典序比字符 j的字典序大，index[i]<index[j] 即表示字符 i 在字母表中的字典序比字符 jjj 的字典序小。

        依次检测第 i个单词 strs[i]与第 i−1i个单词 strs[i−1]的字典序大小，我们可以依次判断两个单词中从左到右每个字符的字典序大小，当第一次出现两个字符的字典序不同时，即可判断两个字符串的字典序的大小。

        特殊情况需要处理，设 strs[i] 的长度为 m，strs[i] 的长度小于 strs[i−1]的长度且 strs[i−1]的前 m 个字符与 strs[i−1]的前 m 个字符相等，此时 strs[i−1] 的字典序大于 strs[i]的字典序。
         */
         int[] index = new int[26];
         for(int i = 0;i < order.length();i++) {
             //对Order排序，越往后越大
             index[order.charAt(i) - 'a'] = i;
         }
         for(int i = 1;i < words.length;i++) {
             boolean isExpress = false;
             for(int j = 0;j < words[i-1].length() && j < words[i].length();j++) {
                int prev = index[words[i - 1].charAt(j) - 'a'];
                int curr = index[words[i].charAt(j) - 'a'];
                if (prev < curr) {
                    isExpress = true;
                    break;
                } else if (prev > curr) {
                    return false;
                }
             }
             if(!isExpress) {
                if(words[i-1].length() > words[i].length()) {
                    return false;
                }
            }
         }
         return true;
    }
}